package com.yulan.slide_windows;

import java.util.HashMap;

/**
 * 560. 和为K的子数组
 * 给定一个整数数组和一个整数 k，你需要找到该数组中和为 k 的连续的子数组的个数。
 */
public class LeetCode_560 {
    public int subarraySum(int[] nums, int k) {
        int count = 0, pre = 0;
        HashMap<Integer,Integer> mp = new HashMap<Integer, Integer>(){{put(0,1);}};//使用hash表记录前缀和 , value : 出现次数
        for(int i = 0;i < nums.length;i++){
            pre += nums[i];//记录前缀和
            if(mp.containsKey(pre - k)){//如果前面已经包含该前缀和 - k ,说明 pre - (pre - k) = k
                count += mp.get(pre - k);
            }
            mp.put(pre,mp.getOrDefault(pre,0)+1);
        }
        return count;
    }
}
